package com.zuo_book.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zuo_book.entity.SysTemplate;
import com.zuo_book.entity.SysTemplateBo;
import com.zuo_book.entity.SysTemplateReview;
import com.zuo_book.entity.SysTemplateStage;

import java.util.List;

/**
 * 项目模板服务接口
 */
public interface SysTemplateService {
    
    /**
     * 创建模板
     * @param template 模板信息
     * @return 模板ID
     */
    Long createTemplate(SysTemplateBo template);
    
    /**
     * 更新模板
     * @param template 模板信息
     */
    void updateTemplate(SysTemplate template);
    
    /**
     * 删除模板
     * @param templateId 模板ID
     */
    void deleteTemplate(Long templateId);
    
    /**
     * 获取模板详情
     * @param templateId 模板ID
     * @return 模板详情
     */
    SysTemplate getTemplateById(Long templateId);
    
    /**
     * 分页查询模板列表
     * @param page 页码
     * @param size 每页大小
     * @param keyword 关键字
     * @param category 分类
     * @return 模板列表
     */
    Page<SysTemplate> listTemplates(int page, int size, String keyword, String category,String isReview);
    
    /**
     * 添加模板阶段
     * @param stage 阶段信息
     * @return 阶段ID
     */
    Long addTemplateStage(SysTemplateStage stage);
    
    /**
     * 更新模板阶段
     * @param stage 阶段信息
     */
    void updateTemplateStage(SysTemplateStage stage);
    
    /**
     * 删除模板阶段
     * @param stageId 阶段ID
     */
    void deleteTemplateStage(Long stageId);
    
    /**
     * 获取模板所有阶段
     * @param templateId 模板ID
     * @return 阶段列表
     */
    List<SysTemplateStage> getTemplateStages(Long templateId);
    
    /**
     * 添加模板评价
     * @param review 评价信息
     * @return 评价ID
     */
    Long addTemplateReview(SysTemplateReview review);
    
    /**
     * 获取模板评价列表
     * @param templateId 模板ID
     * @param page 页码
     * @param size 每页大小
     * @return 评价列表
     */
    Page<SysTemplateReview> listTemplateReviews(Long templateId, int page, int size);
    
    /**
     * 购买模板
     * @param userId 用户ID
     * @param templateId 模板ID
     * @return 是否成功
     */
    boolean purchaseTemplate(Long userId, Long templateId);
    
    /**
     * 检查用户是否已购买模板
     * @param userId 用户ID
     * @param templateId 模板ID
     * @return 是否已购买
     */
    boolean hasUserPurchasedTemplate(Long userId, Long templateId);
    
    /**
     * 获取用户已购买的模板列表
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页大小
     * @return 模板列表
     */
    Page<SysTemplate> getUserPurchasedTemplates(Long userId, int page, int size);

    /**
     * 获取用户已经购买的模板列表
     */
    List<SysTemplateBo> getlistUserPurchasedTemplates(Long userId);
}